﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace 析构方法01
{
    class Program
    {
        static void Main(string[] args)
        {
            Car car = new Car("Benz", 100);
            car.Run();
            Car smallCar = new Car("BMW", 101);
            for (int i = 0; i < 10; i++)
            {
                Console.WriteLine(i);
            }

            // 不能在结构体中定义析构方法，只能对类使用析构方法
            // 一个类只能有一个析构方法
            // 无法手动调用析构方法，它们是自动调用的
            // 析构方法既没有修饰符，也没有参数
        }
    }

    class Car
    {
        public string Brand { get; set; }
        public double Price { get; set; }

        public Car(string brand, double price)
        {
            this.Brand = brand;
            Price = price;
        }

        // 构造方法用来实例化，分配内存空间
        // 析构方法用来析构类的实例，与构造方法相反，用于释放内存
        ~Car()
        {
            Console.WriteLine("析构方法");
            Animal ani = new Animal(1001, "小狗");
            Console.WriteLine(ani.ID + " " + ani.Name);
            ani.Eat();
        }

        public void Run()
        {
            Console.WriteLine("开车...");
        }
    }

    class Animal
    {
        public int ID { get; set; }
        public string Name { get; set; }
        public Animal(int id, string name)
        {
            ID = id;
            Name = name;
        }
        public void Eat()
        {
            Console.WriteLine("进食...");
        }

        ~Animal()
        {
            Console.WriteLine("animal的析构方法");
        }
    }
}
